update focus indicators in popovers
authorCaolán McNamara <caolanm@redhat.com>
Fri, 5 Nov 2021 13:07:35 +0000 (13:07 +0000)
committerCaolán McNamara <caolanm@redhat.com>
Fri, 5 Nov 2021 13:50:48 +0000 (13:50 +0000)
https://gitlab.gnome.org/GNOME/gtk/-/issues/4383

gtk/gtkpopover.c
gtk/gtkwindow.c
gtk/gtkwindowprivate.h

index 244fedcd7a15b10692b5ed313dc861b8e531ec5f..2ef05001713ab60c3373d2dd2d3b2495a606175c 100644 (file)
@@ -776,6 +776,7 @@ gtk_popover_key_pressed (GtkWidget       *widget,
                          GdkModifierType  state)
 {
   GtkPopover *popover = GTK_POPOVER (widget);
+  GtkWindow *root;
 
   if (keyval == GDK_KEY_Escape)
     {
@@ -783,6 +784,8 @@ gtk_popover_key_pressed (GtkWidget       *widget,
       return TRUE;
     }
 
+  root = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (popover)));
+  _gtk_window_update_focus_visible (root, keyval, state, TRUE);
   update_mnemonics_visible (popover, keyval, state, TRUE);
 
   return FALSE;
@@ -795,7 +798,10 @@ gtk_popover_key_released (GtkWidget       *widget,
                           GdkModifierType  state)
 {
   GtkPopover *popover = GTK_POPOVER (widget);
+  GtkWindow *root;
 
+  root = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (popover)));
+  _gtk_window_update_focus_visible (root, keyval, state, FALSE);
   update_mnemonics_visible (popover, keyval, state, FALSE);
 
   return FALSE;
index 6ae7cef9fb9b59de590ba93739d2124f6ed7a12d..999d0f58d4eb67b63e697d5c21c7bc7a9fb2506a 100644 (file)
@@ -4815,11 +4815,11 @@ update_mnemonics_visible (GtkWindow       *window,
     }
 }
 
-static void
-update_focus_visible (GtkWindow       *window,
-                      guint            keyval,
-                      GdkModifierType  state,
-                      gboolean         visible)
+void
+_gtk_window_update_focus_visible (GtkWindow       *window,
+                                  guint            keyval,
+                                  GdkModifierType  state,
+                                  gboolean         visible)
 {
   GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
 
@@ -4854,7 +4854,7 @@ gtk_window_key_pressed (GtkWidget       *widget,
 {
   GtkWindow *window = GTK_WINDOW (widget);
 
-  update_focus_visible (window, keyval, state, TRUE);
+  _gtk_window_update_focus_visible (window, keyval, state, TRUE);
   update_mnemonics_visible (window, keyval, state, TRUE);
 
   return FALSE;
@@ -4869,7 +4869,7 @@ gtk_window_key_released (GtkWidget       *widget,
 {
   GtkWindow *window = GTK_WINDOW (widget);
 
-  update_focus_visible (window, keyval, state, FALSE);
+  _gtk_window_update_focus_visible (window, keyval, state, FALSE);
   update_mnemonics_visible (window, keyval, state, FALSE);
 
   return FALSE;
index a9546272eccb0304df4408e371951d25f6e7786b..27b824690ccaf650cfd522f99fb5dfe6f545346f 100644 (file)
@@ -47,6 +47,11 @@ gboolean        _gtk_window_group_widget_is_blocked_for_device (GtkWindowGroup *
 void            _gtk_window_unset_focus_and_default (GtkWindow *window,
                                                      GtkWidget *widget);
 
+void            _gtk_window_update_focus_visible (GtkWindow       *window,
+                                                  guint            keyval,
+                                                  GdkModifierType  state,
+                                                  gboolean         visible);
+
 void            _gtk_window_set_allocation         (GtkWindow     *window,
                                                     int            width,
                                                     int            height,